package com.such.kit.validate;

import java.util.Date;
import com.such.kit.datacast.CastCommons;

/**
 * @author SUCH
 * <pre>
 * 日期校验工具类
 * </pre>
 */
public class ValidateDate {

	/**
	 * <pre>
	 * 比较 value1 是否等于 value2
	 * </pre>
	 * @param value1 日期1
	 * @param value2 日期2
	 * @return true 为相等
	 */
	public static boolean eq(Date value1, Date value2) {
		return value1.getTime() == value2.getTime();
	}

	/**
	 * <pre>
	 * 比较 value1 是否等于 value2
	 * </pre>
	 * @param value1 日期1
	 * @param value2 日期2
	 * @param format 日期格式
	 * @return true 为相等
	 */
	public static boolean eq(String value1, String value2, String format) {
		return eq(CastCommons.stringToDate(value1, format), CastCommons.stringToDate(value2, format));
	}

	/**
	 * <pre>
	 * 比较 value1 是否不等于 value2
	 * </pre>
	 * @param value1 日期1
	 * @param value2 日期2
	 * @return true 为不相等
	 */
	public static boolean ne(Date value1, Date value2) {
		return value1.getTime() != value2.getTime();
	}

	/**
	 * <pre>
	 * 比较 value1 是否不等于 value2
	 * </pre>
	 * @param value1 日期1
	 * @param value2 日期2
	 * @param format 日期格式
	 * @return true 为不相等
	 */
	public static boolean ne(String value1, String value2, String format) {
		return ne(CastCommons.stringToDate(value1, format), CastCommons.stringToDate(value2, format));
	}

	/**
	 * <pre>
	 * 比较 value1 是否小于 value2
	 * </pre>
	 * @param value1 日期1
	 * @param value2 日期2
	 * @return true 为小于
	 */
	public static boolean lt(Date value1, Date value2) {
		return value1.getTime() < value2.getTime();
	}

	/**
	 * <pre>
	 * 比较 value1 是否小于 value2
	 * </pre>
	 * @param value1 日期1
	 * @param value2 日期2
	 * @param format 日期格式
	 * @return true 为小于
	 */
	public static boolean lt(String value1, String value2, String format) {
		return lt(CastCommons.stringToDate(value1, format), CastCommons.stringToDate(value2, format));
	}

	/**
	 * <pre>
	 * 比较 value1 是否小于等于 value2
	 * </pre>
	 * @param value1 日期1
	 * @param value2 日期2
	 * @return true 为小于等于
	 */
	public static boolean le(Date value1, Date value2) {
		return value1.getTime() <= value2.getTime();
	}

	/**
	 * <pre>
	 * 比较 value1 是否小于等于 value2
	 * </pre>
	 * @param value1 日期1
	 * @param value2 日期2
	 * @param format 日期格式
	 * @return true 为小于等于
	 */
	public static boolean le(String value1, String value2, String format) {
		return le(CastCommons.stringToDate(value1, format), CastCommons.stringToDate(value2, format));
	}

	/**
	 * <pre>
	 * 比较 value1 是否大于 value2
	 * </pre>
	 * @param value1 日期1
	 * @param value2 日期2
	 * @return true 为大于
	 */
	public static boolean gt(Date value1, Date value2) {
		return value1.getTime() > value2.getTime();
	}

	/**
	 * <pre>
	 * 比较 value1 是否大于 value2
	 * </pre>
	 * @param value1 日期1
	 * @param value2 日期2
	 * @param format 日期格式
	 * @return true 为大于
	 */
	public static boolean gt(String value1, String value2, String format) {
		return gt(CastCommons.stringToDate(value1, format), CastCommons.stringToDate(value2, format));
	}

	/**
	 * <pre>
	 * 比较 value1 是否大于等于 value2
	 * </pre>
	 * @param value1 日期1
	 * @param value2 日期2
	 * @return true 为大于等于
	 */
	public static boolean ge(Date value1, Date value2) {
		return value1.getTime() >= value2.getTime();
	}

	/**
	 * <pre>
	 * 比较 value1 是否大于等于 value2
	 * </pre>
	 * @param value1 日期1
	 * @param value2 日期2
	 * @param format 日期格式
	 * @return true 为大于等于
	 */
	public static boolean ge(String value1, String value2, String format) {
		return ge(CastCommons.stringToDate(value1, format), CastCommons.stringToDate(value2, format));
	}

	/**
	 * <pre>
	 * value 是否在 start 到 end 区间内
	 * </pre>
	 * @param value 日期
	 * @param start 区间开始日期
	 * @param end 区间结束日期
	 * @param close 是否闭区间
	 * @return true 为在区间内
	 */
	public static boolean interval(Date value, Date start, Date end, boolean close) {
		boolean boole = false;
		if (close) {
			boole = (ge(value, start) && le(value, end));
		} else {
			boole = (gt(value, start) && lt(value, end));
		}
		return boole;
	}

	/**
	 * <pre>
	 * value 是否在 start 到 end 区间内
	 * </pre>
	 * @param value 日期
	 * @param start 区间开始日期
	 * @param end 区间结束日期
	 * @param close 是否闭区间
	 * @param format 日期格式
	 * @return true 为在区间内
	 */
	public static boolean interval(String value, String start, String end, boolean close, String format) {
		return interval(CastCommons.stringToDate(value, format), CastCommons.stringToDate(start, format),
				CastCommons.stringToDate(end, format), close);
	}

}
